{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchvision.datasets as datasets\n",
    "import torchvision.transforms as transforms\n",
    "from torch.utils.data import DataLoader\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# hack to import files from parent directory\n",
    "import os\n",
    "import sys\n",
    "upper_dir = os.path.abspath(os.path.join('..'))\n",
    "if upper_dir not in sys.path:\n",
    "    sys.path.append(upper_dir)\n",
    "    \n",
    "\n",
    "# packages existing in parent directory\n",
    "from Feedforward.feedforward import Feedforward\n",
    "import utils.ntk_lib as ntk_lib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchvision.datasets as datasets\n",
    "import torchvision.transforms as transforms\n",
    "from torch.utils.data import DataLoader\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "width = 160000\n",
    "output_d = 1\n",
    "bias=True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "n = 10000\n",
    "d = 3\n",
    "uniform_hypersphere_data = np.random.randn(n,d)\n",
    "uniform_hypersphere_data = uniform_hypersphere_data/np.linalg.norm(uniform_hypersphere_data, axis=1).reshape(-1,1)\n",
    "uniform_hypersphere_data = torch.tensor(uniform_hypersphere_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from math import pi\n",
    "def gaussianAct(x):\n",
    "    return torch.exp(-x**2/2)/(2*pi)**0.5\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "fig, axs = plt.subplots(1, 3)\n",
    "\n",
    "depth = 2\n",
    "acts = [torch.nn.functional.relu, torch.tanh, gaussianAct]\n",
    "act_name = ['ReLU', 'Tanh', 'Gaussian']\n",
    "data = uniform_hypersphere_data\n",
    "\n",
    "stop_index = 2000\n",
    "\n",
    "result = [[],[],[]]\n",
    "\n",
    "for k, act in enumerate(acts):\n",
    "    # initialize network\n",
    "    input_d = data.shape[-1]\n",
    "    net = Feedforward(width, input_d, output_d, act, depth, bias)\n",
    "    net = net.double()\n",
    "\n",
    "    # Compute NTK\n",
    "    ntk_data = ntk_lib.ntk(net, data)\n",
    "\n",
    "    # Compute eigenvalues for the NTK\n",
    "    eigs = np.linalg.eigvalsh(ntk_data)\n",
    "    eigs_reversed_sorted = np.sort(eigs)[::-1]\n",
    "    result[k] = eigs_reversed_sorted\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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TvWrGYaK8+GHH3LvvffyyCOPsG7dOgYMGMDQoUPZt2/fKZVp1qwZU6dOZe3atSQkJDBo0CCGDRvGr7/+WpBn9erV/PnnnwXH2rVrERGuueaaItdr3759kXz56yjAcpn5+OOPGTp0KHFxcUXK5a/fLX788ccfHj+f5cuXIyIMGDCgSPrx48f5+uuv2bNnD/v372fTpk18//33dOzYkfvuu49BgwYxfPhw+vfvj8Ph8Ph6hhpGbCfrdc6V/rXDR1TGoJmv8kyZMoU+ffoQHR1Nw4YNufTSS9m0aVPFb7YMSht8K0tzVEsGAipti4vk5GR++uknhg4dWpD2ww8/sGbNGr788kueeeaZIjq4fPlyLrvsMpo2bYqIMGvWrHLvwZPBSij/uZd1z9u2bePo0aP069evYCAxOTmZ2267jYSEBF544QUAlixZwqBBg3jkkUd46aWXuO6667jlllvKvQdDNef6edD2Aji2k7i6YYzs04KPVv9RK2eFy/sNV1TfPPmdV0Q/KkplamdZGpmSksJ9991Hy5YtCQsLY8CAAaxe7fkA9TPPPIOIcNddd5U49+eff3LDDTfQsGFDQkND6dSpE8uWLfPo3rzVyJkzZ/LVV1/x6aefMn36dI/trzCq6pcDK2DWrELvI7ACZbUtlPYu8O/KuH6vXr3UI356Q3VitGpqkmf5azBbtmzxtwkV4owzztCbb765SNppp52mEyZM8GkZVdV69erpG2+8Uer5yZMna506dTQtLa0gbeLEidq5c+dSyyxfvlz79++vL774ot54441lXr80li5dqldddZXbc1OmTNG4uDht2bKlxsbGanh4uI4ZM0Y/+ugjveOOOwryPfvsszp16tQS5W+66SadP3++x9crTFnfKSBB/aRPtf3wWB/zWfyUpZM5mapafbVi7ty56nA4dPr06bplyxa96667NCIiQvfu3XtKZXyVZ8iQITpz5kzduHGj/vrrrzps2DCNjY3Vo0ePurXthx9+0MzMzBLpu3bt0t27d5d6Tzk5OdqgQQNdvny5tm3btqxHVuJ6l112WcH7Rx55RKdPn+4271tvvaWjR48uta77779f33777YL3X3/9tT788MP68ccfa1hYWJFzpTFv3jxdsGCB7tixQ7dt26aPPPKIOhwO3bBhQ0Geinzmhfn22281Li5OU1JSysx31113eVRfcYxGBubhlUYueEh1chNVp1MPJqdr20cX6AMfr/e8fCGqq7aqlv8b9lbf8vHkd+6tfgSyduZTXCOvueYa7dChgy5dulR37NihEydO1OjoaN2/f3+511+1apW2atVKu3XrpnfeeWeRc8ePH9fWrVvr6NGj9eeff9Zdu3bpd9995/F3sTI10hf6WOXiATiAUGAKVlj7UMDhOjcXK9JfBHAmlmt058qww2MR+3m6qyN8xLP8NZjqKMBZWVlqt9v1o48+KpJ+xx136DnnnOOzMrm5ufrBBx9oUFCQ/vrrr27zOJ1Obd26dQmRmThxooaFhWlcXJy2atVKR4wYoTt37iw4//TTT+u4ceN04MCB+uWXX5Z7z+7wtGNaON+qVau0R48empGRobm5uXrxxRfrvHnzVFX18OHDqqr622+/adeuXTUnJ6dC1zONvMA8vO4I5+tkSqKqVk+tUK28QTNf5SlOSkqK2mw2t7rgdDq1Z8+e+re//U2zs7ML0vfu3astW7bUBx54oNR6Kzr4lpOTo23atNF9+/Zpenq6duzYUQ8cOOA275AhQ/Trr78ueJ+amqonT54suK+ePXvqL7/84rZsRESERx1hdxQfrKzooGc+77zzjt5333165MiRAvt9idHIwDy80sh8fXzrQtXPbtWpn/2orSfM1437kz2vw0V11dbiePIbLkvfyqOsSYnyrh2o2lmWRqanp6vdbi9oo+XTs2dPffTRR8u8dnJyssbHx+vixYv13HPPLdFGffjhh3XAgAEe30txKlMjfaGP/nCNrj6h78Fa4wGgZgul6khSUhJ5eXnExsYWSY+NjeXQIfcBx70ps3HjRiIjIwkJCeG2227j888/LzUYwKJFi9i9ezc333xzkfS+ffsya9YsvvnmG2bMmMGhQ4cYMGAAR49agdUTEhIICgpix44dRdwIPWXw4MFcffXVLFiwgGbNmhVE7evevXuZ5fr168fQoUPp0aMH3bp1o02bNlx22WUADBs2jE6dOjFq1CjefvvtIq7RpV3PUIPJj46addK/dpwC2dnZrFmzhiFDhhRJHzJkCD/++GOFy/gqjztSUlJwOp3Uq1evxDkRYcGCBezYsYMRI0aQm5vL/v37GThwIP369WPKlCml1rtixQr69evHl19+yZVXeu7y7nA4ePHFFzn//PPp2rUrt99+e8FyjsJ6k5SUxPr164tE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ySnyfujQoezdu5dvvvmGxYsXc8kll3D11Vfz9ttvExUVxdq1a1m+fDmLFi1iypQpPPLII6xevdptR/uGG27g8OHDvPjii7Rq1YqQkBDOP//8IvEhwOh6dcWTGeFNeDZcL658gfPL8wHhIQ5SXGuEDTWHiRMnMnToUMaOHUvPnj05fPgwNpuN+Pj4CtXXvn173nvvPTIyMopEmF27di0tW7YkJCTEV6Yb/EOt1kFfICI0jAohNMjGH8cy+D0xlaZ1w6jnCIGMY5C4GRBr3+HgSGuf4QDqFK9cuZI2bdowYcKEgrQ9e/b4zyCDIbAwGukvbEFIXg4NIkMICbKzzxVRuln9MOqEBca64QYNGjBkyBBeffVV7r777lKjMickJJCdnc2LL76I3W59RebPn18kT8OGDUlPT+fkyZMFkxXr168vUVdMTAyjR49m9OjRDB06lGuvvZY33niDkJAQHA4HgwYNYtCgQTzxxBM0atSI+fPnM3bs2BL1rFy5kv/85z9ccsklgLUFVOFdBQzVG086wgMr3YoAJiLYzkkEVdMRrkmcd955dO7cmcmTJzNt2jTOPPNMLr/8cp599lk6dOjAoUOHWLhwIYMHD+bss88uKLdp06aCqLL5dOvWjVGjRvHkk09y/fXXM2HCBOrUqcOKFSt46aWXmDp1alXfnsH31God9CVRoUG0jbWz71g6fxxPJy08hib1G2DPy7TWC2enQHoSRDW2ZogDhHbt2rF7924++ugjevXqxddff82nn37qb7MMhkDBaKS/sAdZgbSAyBAHpzWKZO8xK0hhTGQejeuEYguAQcXXXnuNM888k169ejFp0iROP/10HA4Ha9asYcOGDQwZMoS2bdvidDp56aWXuPLKK/npp5+KRHsG6Nu3LxERETz88MOMGzeODRs28NprrxXJ869//YuePXvSuXNncnNz+eyzz4iPjyckJIT58+ezc+dOzjnnHOrXr8/SpUtJSUmhY8eObu1u164dc+bMoW/fvqSlpfHggw+WWBJjqL6U2xFW1Vq9q3RYsB2nmRGukYwfP55//OMfPPTQQyxYsIDHHnuMW265hcTERGJjYznzzDO5/vrri5QZOLDk//qUlJSCju+ECRO47LLLOHHiBKeddhovvPACN910U1XdkqGSqM46KCI2rLVzbbBmY25R1a3+tCnIbiM+JoLDKVkknswk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\n",
      "text/plain": [
       "<Figure size 1008x252 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "import numpy as np\n",
    "start = 100\n",
    "stop = 500\n",
    "stop_index = 1500\n",
    "list_n = np.array(range(start, stop))\n",
    "n = (list_n).shape[0]\n",
    "X = np.zeros((n,1))\n",
    "X[:,0] = np.log(list_n+1)\n",
    "# X[:,1] = np.ones(n)\n",
    "y_s = np.log(result[0][start:stop]/data.shape[0])\n",
    "reg = LinearRegression().fit(X, y_s)\n",
    "reg.score(X, y_s)\n",
    "\n",
    "fig, axs = plt.subplots(1,3)\n",
    "axs[0].semilogy(np.array(range(0,stop_index)), np.exp(reg.predict(np.log((np.array(range(0,stop_index))\n",
    "                                                                          +1).reshape(-1,1)))))\n",
    "axs[0].semilogy(result[0][:stop_index]/data.shape[0], label=act_name[0])\n",
    "axs[0].legend([\"${:.4f}\\ell^{{{:.4f}}}$\".format(np.exp(reg.intercept_),reg.coef_[0]),f\"ReLU\"],fontsize=14)\n",
    "axs[0].set_title('NTK Spectrum: ReLU', fontsize=17)\n",
    "axs[0].tick_params(axis='both', labelsize=12)\n",
    "axs[0].set_ylabel('Eigenvalue', fontsize=15)\n",
    "axs[0].set_xlabel('Eigenvalue Index $\\ell$', fontsize=15)\n",
    "fig.set_size_inches(14, 3.5)\n",
    "fig.tight_layout(pad=3.0)\n",
    "\n",
    "start = 100\n",
    "stop = 600\n",
    "stop_index = 800\n",
    "list_n = np.array(range(start, stop))\n",
    "n = (list_n).shape[0]\n",
    "X = np.zeros((n,1))\n",
    "X[:,0] = (list_n+1)**0.5**(1/(data.shape[1]-1))\n",
    "# X[:,1] = np.ones(n)\n",
    "y_s = np.log(result[1][start:stop]/data.shape[0]*(list_n+1)**(1.5/2))\n",
    "reg = LinearRegression().fit(X, y_s)\n",
    "reg.score(X, y_s)\n",
    "\n",
    "axs[1].semilogy(np.array(range(1,stop_index)), 1/np.array(range(2,stop_index+1))**(1.5/2)*np.exp(reg.predict((((np.array(range(1,stop_index))+1)**0.5**(1/(data.shape[1]-1))).reshape(-1,1)))))\n",
    "axs[1].semilogy(result[1][:stop_index]/data.shape[0], label=act_name[0])\n",
    "# axs[1].legend([\"${:.4f}e^{{{:.2f}n^{{1/4}}}}$\".format(np.exp(reg.intercept_),reg.coef_[0]),f\"Tanh activation\"],fontsize=15)\n",
    "axs[1].legend([\"${:.4f}\\\\times\\ell^{{-0.75}}{:.2f}^{{-\\ell^{{1/4}}}}$\".format(np.exp(reg.intercept_),np.exp(-reg.coef_[0])),f\"Tanh\"],fontsize=14)\n",
    "axs[1].set_title('NTK Spectrum: Tanh', fontsize=17)\n",
    "axs[1].tick_params(axis='both', labelsize=12)\n",
    "axs[1].set_ylabel('Eigenvalue', fontsize=15)\n",
    "axs[1].set_xlabel('Eigenvalue Index $\\ell$', fontsize=15)\n",
    "fig.set_size_inches(14, 3.5)\n",
    "fig.tight_layout(pad=3.0)\n",
    "\n",
    "\n",
    "start = 100\n",
    "stop = 300\n",
    "stop_index = 400\n",
    "list_n = np.array(range(start, stop))\n",
    "n = (list_n).shape[0]\n",
    "X = np.zeros((n,1))\n",
    "X[:,0] = (list_n+1)**(1/(data.shape[1]-1))\n",
    "# X[:,1] = np.ones(n)\n",
    "y_s = np.log(result[2][start:stop]/data.shape[0]*(list_n+1)**(1/2))\n",
    "reg = LinearRegression().fit(X, y_s)\n",
    "reg.score(X, y_s)\n",
    "\n",
    "axs[2].semilogy(np.array(range(1,stop_index)), 1/np.array(range(2,stop_index+1))**(1/2)*np.exp(reg.predict((((np.array(range(1,stop_index))+1)**(1/(data.shape[1]-1))).reshape(-1,1)))))\n",
    "axs[2].semilogy(result[2][:stop_index]/data.shape[0], label=act_name[0])\n",
    "axs[2].legend([\"${:.2f}\\\\times\\ell^{{-0.5}}{:.2f}^{{-\\ell^{{1/2}}}}$\".format(np.exp(reg.intercept_),np.exp(-reg.coef_[0])),f\"Gaussian\"],fontsize=14)\n",
    "axs[2].set_title('NTK Spectrum: Gaussian', fontsize=17)\n",
    "axs[2].tick_params(axis='both', labelsize=12)\n",
    "axs[2].set_ylabel('Eigenvalue', fontsize=15)\n",
    "axs[2].set_xlabel('Eigenvalue Index $\\ell$', fontsize=15)\n",
    "fig.set_size_inches(14, 6)\n",
    "fig.tight_layout(pad=3.0)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
